package br.com.salao.session;

import java.util.List;

import javax.ejb.Remote;
import javax.ejb.Stateless;
import javax.ejb.TransactionAttribute;
import javax.ejb.TransactionAttributeType;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;

import org.apache.log4j.Logger;

import br.com.salao.ejb.dao.EstabelecimentoDao;
import br.com.salao.ejb.dao.impl.EstabelecimentoDaoImpl;
import br.com.salao.ejb.util.Utils;
import br.com.salao.entity.Estabelecimento;
import br.com.salao.entity.Login;

@Stateless
@Remote(EstabelecimentoBase.class)
public class EstabelecimentoBean implements EstabelecimentoBase{

	/**
	 * @author Dri
	 */
	private static final long serialVersionUID = 1L;

	@PersistenceContext(unitName = "SalaoBeleza")
	private EntityManager em;

	private Logger logger = Logger.getLogger(EstabelecimentoBean.class.getName());

	public EstabelecimentoBean(){
		//em = JpaUtil.getEntityManager();
	}

	@TransactionAttribute
	public Estabelecimento inserir(Estabelecimento estabelecimento) throws Exception{

		EstabelecimentoDao dao = new EstabelecimentoDaoImpl(em);

		try{
			return dao.inserir(estabelecimento);
		}catch (Exception e) {

			logger.error("EstabelecimentoModel :: inserir() :: Erro ao inserir estabelecimento ::");

			StringBuffer sb = new StringBuffer();
			sb.append(e.getStackTrace() + "\n");
			sb.append(e.getCause() + "\n");
			sb.append(e.getMessage() + "\n");
			logger.error(sb.toString());

			return null;			
		}
	}
	
	public List<Estabelecimento> buscarEstabelecimentoPorNomeFantasia(String nomeFantasia) throws Exception{

		EstabelecimentoDao dao = new EstabelecimentoDaoImpl(em);

		try{
			return dao.buscarEstabelecimentoPorNomeFantasia(nomeFantasia);
		}catch (Exception e) {

			logger.error("EstabelecimentoModel :: buscarEstabelecimentoPorNomeFantasia() :: Erro");

			StringBuffer sb = new StringBuffer();
			sb.append(e.getStackTrace() + "\n");
			sb.append(e.getCause() + "\n");
			sb.append(e.getMessage() + "\n");
			logger.error(sb.toString());

			return null;			
		}
	}

	public Estabelecimento formatarCampos(Estabelecimento estabelecimento) throws Exception{		

		estabelecimento.getEndereco().setLogradouro(Utils.removeAcentosTexto(estabelecimento.getEndereco().getLogradouro().trim().toUpperCase()));
		estabelecimento.setRazaoSocial(estabelecimento.getRazaoSocial().trim().toUpperCase());

		return estabelecimento;
	}

	public boolean isCampoNulo(Estabelecimento estabelecimento) throws Exception{


		if(estabelecimento.getEndereco().getLogradouro() == null ||
				estabelecimento.getEndereco().getBairro().getDescricao() == null ||
				estabelecimento.getEndereco().getBairro().getCidade().getNome() == null){

			return true;
		}

		return false;
	}

	@TransactionAttribute(TransactionAttributeType.NOT_SUPPORTED)
	public List<Estabelecimento> buscarEstabelecimentosPorUsuario(Login login){
		EstabelecimentoDao dao = new EstabelecimentoDaoImpl(em);
		return dao.buscarEstabelecimentosPorUsuario(login);
	}

	@TransactionAttribute(TransactionAttributeType.NOT_SUPPORTED)
	public List<Estabelecimento> buscarEstabelecimentoPorCidade(int idCidade){
		EstabelecimentoDao dao = new EstabelecimentoDaoImpl(em);
		return dao.buscarEstabelecimentoPorCidade(idCidade);
	}

	@TransactionAttribute
	public Estabelecimento update(Estabelecimento estabelecimento){
		EstabelecimentoDao dao = new EstabelecimentoDaoImpl(em);
		return dao.update(estabelecimento);
	}

	@TransactionAttribute(TransactionAttributeType.NOT_SUPPORTED)
	public List<Estabelecimento> buscarEstabelecimentoPorBairro(int idBairro){
		EstabelecimentoDao dao = new EstabelecimentoDaoImpl(em);
		return dao.buscarEstabelecimentoPorBairro(idBairro);
	}

	@TransactionAttribute(TransactionAttributeType.NOT_SUPPORTED)
	public Estabelecimento buscarEstabelecimentosPorId(int idEstabelecimento) {
		EstabelecimentoDao dao = new EstabelecimentoDaoImpl(em);
		return dao.buscarEstabelecimentosPorId(idEstabelecimento);
	}


}
